package com.warm.orm.eq.sys.agent;

import com.warm.orm.domain.sys.SysMenu;
import com.warm.orm.eq.sys.mapper.SysMenuMapper;
import com.warm.system.api.orm.agent.SysMenuAgent;
import org.noear.solon.annotation.Component;
import org.noear.solon.annotation.Inject;

import java.util.List;

/**
 * 菜单表 数据层 orm代理类
 *
 * @author warm
 */
@Component
public class SysMenuAgentImpl implements SysMenuAgent {

    @Inject
    private SysMenuMapper menuMapper;

    /**
     * 校验菜单名称是否唯一
     *
     * @param menuName 菜单名称
     * @param parentId 父菜单ID
     * @return 结果
     */
    @Override
    public SysMenu checkMenuNameUnique(String menuName, Long parentId) {
        return this.menuMapper.checkMenuNameUnique(menuName, parentId);
    }

    /**
     * 删除菜单管理信息
     *
     * @param menuId 菜单ID
     * @return 结果
     */
    @Override
    public int deleteMenuById(Long menuId) {
        return this.menuMapper.deleteMenuById(menuId);
    }

    /**
     * 是否存在菜单子节点
     *
     * @param menuId 菜单ID
     * @return 结果
     */
    @Override
    public int hasChildByMenuId(Long menuId) {
        return this.menuMapper.hasChildByMenuId(menuId);
    }

    /**
     * 新增菜单信息
     *
     * @param menu 菜单信息
     * @return 结果
     */
    @Override
    public int insertMenu(SysMenu menu) {
        return this.menuMapper.insertMenu(menu);
    }

    /**
     * 根据菜单ID查询信息
     *
     * @param menuId 菜单ID
     * @return 菜单信息
     */
    @Override
    public SysMenu selectMenuById(Long menuId) {
        return this.menuMapper.selectMenuById(menuId);
    }

    /**
     * 查询系统菜单列表
     *
     * @param menu 菜单信息
     * @return 菜单列表
     */
    @Override
    public List<SysMenu> selectMenuList(SysMenu menu) {
        return this.menuMapper.selectMenuList(menu);
    }

    /**
     * 根据角色ID查询菜单树信息
     *
     * @param roleId            角色ID
     * @param menuCheckStrictly 菜单树选择项是否关联显示
     * @return 选中菜单列表
     */
    @Override
    public List<Long> selectMenuListByRoleId(Long roleId, boolean menuCheckStrictly) {
        return this.menuMapper.selectMenuListByRoleId(roleId, menuCheckStrictly);
    }

    @Override
    public List<Long> selectMenuListByPackageId(Long roleId) {
        return null;
    }

    /**
     * 根据用户查询系统菜单列表
     *
     * @param menu 菜单信息
     * @return 菜单列表
     */
    @Override
    public List<SysMenu> selectMenuListByUserId(SysMenu menu) {
        return this.menuMapper.selectMenuListByUserId(menu);
    }

    /**
     * 根据用户所有权限
     *
     * @return 权限列表
     */
    @Override
    public List<String> selectMenuPerms() {
        return this.menuMapper.selectMenuPerms();
    }

    /**
     * 根据角色ID查询权限
     *
     * @param roleId 角色ID
     * @return 权限列表
     */
    @Override
    public List<String> selectMenuPermsByRoleId(Long roleId) {
        return this.menuMapper.selectMenuPermsByRoleId(roleId);
    }

    /**
     * 根据用户ID查询权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    @Override
    public List<String> selectMenuPermsByUserId(Long userId) {
        return this.menuMapper.selectMenuPermsByUserId(userId);
    }

    /**
     * 根据用户ID查询菜单
     *
     * @return 菜单列表
     */
    @Override
    public List<SysMenu> selectMenuTreeAll() {
        return this.menuMapper.selectMenuTreeAll();
    }

    /**
     * 根据用户ID查询菜单
     *
     * @param userId 用户ID
     * @return 菜单列表
     */
    @Override
    public List<SysMenu> selectMenuTreeByUserId(Long userId) {
        return this.menuMapper.selectMenuTreeByUserId(userId);
    }

    /**
     * 修改菜单信息
     *
     * @param menu 菜单信息
     * @return 结果
     */
    @Override
    public int updateMenu(SysMenu menu) {
        return this.menuMapper.updateMenu(menu);
    }
}
